﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using WebMsgBoxNamespace;
using BackstageMusiciansFriend;
using System.Collections;
using VariablesGlobalesNamespace;
using ControlTareaPendienteNamespace;
using ControlImportacionNamespace;
using ControlLogNamespace;
using ControlCompetenciaNamespace;
using ControlModificacionDePreciosNamespace;

namespace DBMethodsNamespace
{
    public class DBMethods
    {
        #region Variables Locales
        string _strConnectionString;
        #endregion

        public DBMethods()
        {
            _strConnectionString = "data source=.;integrated security=SSPI;initial catalog=w1550972_mym";
        }

        #region Accessing Protocol
        public string strConnectionString
        {
            get { return _strConnectionString; }
            set { _strConnectionString = value; }
        }
        #endregion

        #region Competidores a Procesar
        /// <summary>
        /// Esta funcion agrega competidores a procesar
        /// </summary>
        /// <param name="intIdCompetidor">Id de la DB del Competidor</param>
        public void agregarCompetidorAProcesar(int intIdCompetidor)
        {
            SqlConnection sConn = new SqlConnection();
            SqlDataReader sReader;
            SqlCommand sCommand = new SqlCommand();
            sConn.ConnectionString = _strConnectionString;
            try
            {
                sCommand.CommandType = CommandType.Text;
                sCommand.CommandText = "INSERT INTO CompetidoresAProcesar (idCompetidor) " +
                                        "VALUES (@idCompetidor) ";

                ControlLog.writeLog("[agregarCompetidorAProcesar] INSERT INTO CompetidoresAProcesar (idCompetidor) VALUES (" + intIdCompetidor.ToString() + ") ");
                sCommand.Parameters.Add(new SqlParameter("@idCompetidor", SqlDbType.Int)).Value = intIdCompetidor;
                sCommand.Parameters.Add("@Return", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
                sConn.Open();

                try
                {
                    sCommand.Connection = sConn;
                    sReader = sCommand.ExecuteReader();
                    while (sReader.Read())
                    {
                        //     Read your data 
                    }
                }
                catch (Exception innerEx)
                {
                    ControlLog.writeLog("[agregarCompetidorAProcesar] Excepcion DB: " + innerEx.Message);
                }

                sConn.Close();
            }
            catch (Exception ee)
            {
                ControlLog.writeLog("[agregarCompetidorAProcesar] Excepcion General: " + ee.Message);
            }
        }

        /// <summary>
        /// Esta función elimina competidores a procesar
        /// </summary>
        /// <param name="intIdCompetidor">Id de la DB del Competidor</param>
        public void quitarCompetidorAProcesar(int intIdCompetidor)
        {
            SqlConnection sConn = new SqlConnection();
            SqlDataReader sReader;
            SqlCommand sCommand = new SqlCommand();
            sConn.ConnectionString = _strConnectionString;
            try
            {
                sCommand.CommandType = CommandType.Text;
                sCommand.CommandText = "DELETE FROM CompetidoresAProcesar WHERE idCompetidor=@idCompetidor ";

                ControlLog.writeLog("[quitarCompetidorAProcesar]DELETE FROM CompetidoresAProcesar WHERE idCompetidor=" + intIdCompetidor.ToString());
                sCommand.Parameters.Add(new SqlParameter("@idCompetidor", SqlDbType.Int)).Value = intIdCompetidor;
                sCommand.Parameters.Add("@Return", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
                sConn.Open();

                try
                {
                    sCommand.Connection = sConn;
                    sReader = sCommand.ExecuteReader();
                    while (sReader.Read())
                    {
                        //     Read your data 
                    }
                }
                catch (Exception innerEx)
                {
                    ControlLog.writeLog("[quitarCompetidorAProcesar] Excepcion DB: " + innerEx.Message);
                }

                sConn.Close();
            }
            catch (Exception ee)
            {
                ControlLog.writeLog("[quitarCompetidorAProcesar] Excepcion General: " + ee.Message);
            }
        }
        #endregion

        #region Preguntas y Respuestas
        /// <summary>
        /// Agregar Preguntas y Respuestas de los usuarios de ML a un usuario en particular.
        /// </summary>
        /// <param name="objPreguntasRespuestas"> Estructura de datos para las preguntas y respuestas</param>
        /// <returns>Boolean</returns>
        public bool agregarPreguntasRespuestas(structPreguntasRespuestasProductoCompetidor objPreguntasRespuestas)
        {
            SqlConnection sConn = new SqlConnection();
            SqlDataReader sReader;
            SqlCommand sCommand = new SqlCommand();
            sConn.ConnectionString = _strConnectionString;
            try
            {
                sCommand.CommandType = CommandType.Text;
                sCommand.CommandText = "INSERT INTO PREGUNTASRESPUESTAS (preguntaDescripcion,respuestaDescripcion,fechaPregunta,fechaRespuesta,idProductoCompetidores,idUsuarioML) " +
                                        "VALUES (@preguntaDescripcion,@respuestaDescripcion,@fechaPregunta,@fechaRespuesta,@idProductoCompetidor,@idUsuarioML) ";

                ControlLog.writeLog("[agregarPreguntasRespuestas] INSERT INTO PREGUNTASRESPUESTAS (preguntaDescripcion,respuestaDescripcion,fechaPregunta,fechaRespuesta,idProductoCompetidores,idUsuarioML) VALUES ('" + objPreguntasRespuestas.strDescripcionPregunta + "','" + objPreguntasRespuestas.strDescripcionRespuesta + "','" + objPreguntasRespuestas.dtFechaPregunta.ToString() + "','" + objPreguntasRespuestas.dtFechaPregunta.ToString() + "','" + objPreguntasRespuestas.idProductoCompetidor.ToString() + "','" + objPreguntasRespuestas.strIdUsuarioML + "')");
                sCommand.Parameters.Add(new SqlParameter("@preguntaDescripcion", SqlDbType.VarChar, 50)).Value = objPreguntasRespuestas.strDescripcionPregunta;
                sCommand.Parameters.Add(new SqlParameter("@respuestaDescripcion", SqlDbType.VarChar, 50)).Value = objPreguntasRespuestas.strDescripcionRespuesta;
                sCommand.Parameters.Add(new SqlParameter("@fechaPregunta", SqlDbType.DateTime)).Value = objPreguntasRespuestas.dtFechaPregunta;
                sCommand.Parameters.Add(new SqlParameter("@fechaRespuesta", SqlDbType.DateTime)).Value = objPreguntasRespuestas.dtFechaRespuesta;
                sCommand.Parameters.Add(new SqlParameter("@idProductoCompetidores", SqlDbType.Int)).Value = objPreguntasRespuestas.idProductoCompetidor;
                sCommand.Parameters.Add(new SqlParameter("@idUsuarioML", SqlDbType.VarChar, 50)).Value = objPreguntasRespuestas.strIdUsuarioML;
                sCommand.Parameters.Add("@Return", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
                sConn.Open();

                try
                {
                    sCommand.Connection = sConn;
                    sReader = sCommand.ExecuteReader();
                    while (sReader.Read())
                    {
                        //     Read your data 
                    }
                }
                catch (Exception innerEx)
                {
                    ControlLog.writeLog("[agregarPreguntasRespuestas] Excepcion DB: " + innerEx.Message);
                }

                sConn.Close();
            }
            catch (Exception ee)
            {
                ControlLog.writeLog("[agregarPreguntasRespuestas] Excepcion General: " + ee.Message);
            }
            return true;
        }

        /// <summary>
        /// Modificar Preguntas y Respuestas hechas a un usuario de ML
        /// </summary>
        /// <param name="intIdPreguntasRespuestas"></param>
        /// <param name="objPreguntasRespuestas"></param>
        /// <returns></returns>
        public bool modificarPreguntasRespuestas(int intIdPreguntasRespuestas, structPreguntasRespuestasProductoCompetidor objPreguntasRespuestas)
        {
            SqlConnection sConn = new SqlConnection();
            SqlDataReader sReader;
            SqlCommand sCommand = new SqlCommand();
            sConn.ConnectionString = _strConnectionString;
            try
            {
                sCommand.CommandType = CommandType.Text;
                sCommand.CommandText = "UPDATE PREGUNTASRESPUESTAS SET preguntaDescripcion=@preguntaDescripcion,respuestaDescripcion=@respuestaDescripcion,fechaPregunta=@fechaPregunta,fechaRespuesta=@fechaRespuesta,idProductoCompetidores=@idProductoCompetidor,idUsuarioML=@idUsuarioML) " +
                                        "WHERE idPreguntasRespuestas=@idPreguntasRespuestas ";

                ControlLog.writeLog("[modificarPreguntasRespuestas] UPDATE PREGUNTASRESPUESTAS SET preguntaDescripcion='" + objPreguntasRespuestas.strDescripcionPregunta + "',respuestaDescripcion='" + objPreguntasRespuestas.strDescripcionRespuesta + "',fechaPregunta='" + objPreguntasRespuestas.dtFechaPregunta.ToString() + "',fechaRespuesta='" + objPreguntasRespuestas.dtFechaRespuesta.ToString() + "',idProductoCompetidores=" + objPreguntasRespuestas.idProductoCompetidor.ToString() + ",idUsuarioML='" + objPreguntasRespuestas.strIdUsuarioML + "') WHERE idPreguntasRespuestas=" + intIdPreguntasRespuestas.ToString());
                sCommand.Parameters.Add(new SqlParameter("@preguntaDescripcion", SqlDbType.VarChar, 50)).Value = objPreguntasRespuestas.strDescripcionPregunta;
                sCommand.Parameters.Add(new SqlParameter("@respuestaDescripcion", SqlDbType.VarChar, 50)).Value = objPreguntasRespuestas.strDescripcionRespuesta;
                sCommand.Parameters.Add(new SqlParameter("@fechaPregunta", SqlDbType.DateTime)).Value = objPreguntasRespuestas.dtFechaPregunta;
                sCommand.Parameters.Add(new SqlParameter("@fechaRespuesta", SqlDbType.DateTime)).Value = objPreguntasRespuestas.dtFechaRespuesta;
                sCommand.Parameters.Add(new SqlParameter("@idProductoCompetidores", SqlDbType.Int)).Value = objPreguntasRespuestas.idProductoCompetidor;
                sCommand.Parameters.Add(new SqlParameter("@idUsuarioML", SqlDbType.VarChar, 50)).Value = objPreguntasRespuestas.strIdUsuarioML;
                sCommand.Parameters.Add(new SqlParameter("@idPreguntasRespuestas", SqlDbType.Int)).Value = intIdPreguntasRespuestas;
                sCommand.Parameters.Add("@Return", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
                sConn.Open();

                try
                {
                    sCommand.Connection = sConn;
                    sReader = sCommand.ExecuteReader();
                    while (sReader.Read())
                    {
                        //     Read your data 
                    }
                }
                catch (Exception innerEx)
                {
                    ControlLog.writeLog("[modificarPreguntasRespuestas] Excepcion DB: " + innerEx.Message);
                }

                sConn.Close();
            }
            catch (Exception ee)
            {
                ControlLog.writeLog("[modificarPreguntasRespuestas] Excepcion General: " + ee.Message);
            }

            return true;
        }

        /// <summary>
        /// Borrar Preguntas y Respuestas alojadas en la DB
        /// </summary>
        /// <param name="intIdPreguntasRespuestas"></param>
        /// <returns></returns>
        public bool borrarPreguntasRespuestas(int intIdPreguntasRespuestas)
        {
            SqlConnection sConn = new SqlConnection();
            SqlDataReader sReader;
            SqlCommand sCommand = new SqlCommand();
            sConn.ConnectionString = _strConnectionString;
            try { }
            catch
            {
            }
            throw new NotImplementedException();
            return true;
        }
        #endregion

        #region Productos Competidores
        /// <summary>
        /// Crea un producto en la base de datos
        /// </summary>
        /// <param name="prod">Instancia de la clase Producto con los datos a almacenar en la base de datos</param>
        /// <param name="strIdDb">String con el ID de DB del Competidor</param>
        public void crearProducto(Producto prod, string strIdDb)
        {

            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO productos (idcompetidor, idpublicacion, link, titulo, moneda, precio, cantvendido, estado, fechainicio, fechafin, fechaconsulta, idDb)" +
                                     "VALUES ( @idcompetidor, @idpublicacion, @link, @titulo, @moneda, @precio, @cantvendido, @estado, @fechainicio, @fechafin, @fechaconsulta, @idDb)";

                if (prod.Link == null)
                {
                    ControlLog.writeLog("[crearProducto] prod.Link es NULL ");
                }
                if (prod.Titulo == null)
                {
                    ControlLog.writeLog("[crearProducto] prod.Titulo es NULL ");
                }

                sComm.Parameters.Add(new SqlParameter("@idcompetidor", SqlDbType.Int)).Value = prod.IdCompetidor;
                sComm.Parameters.Add(new SqlParameter("@idpublicacion", SqlDbType.NVarChar, 50)).Value = prod.IdPublicacion;
                sComm.Parameters.Add(new SqlParameter("@link", SqlDbType.NVarChar, 200)).Value = prod.Link;
                sComm.Parameters.Add(new SqlParameter("@titulo", SqlDbType.NVarChar, 100)).Value = prod.Titulo;
                sComm.Parameters.Add(new SqlParameter("@moneda", SqlDbType.NVarChar, 50)).Value = prod.Moneda;
                sComm.Parameters.Add(new SqlParameter("@precio", SqlDbType.Float)).Value = prod.Precio;
                sComm.Parameters.Add(new SqlParameter("@cantvendido", SqlDbType.Int)).Value = prod.CantVendido;
                sComm.Parameters.Add(new SqlParameter("@estado", SqlDbType.NVarChar, 50)).Value = prod.Estado;
                sComm.Parameters.Add(new SqlParameter("@fechainicio", SqlDbType.NVarChar, 50)).Value = prod.FechaInicio;
                sComm.Parameters.Add(new SqlParameter("@fechafin", SqlDbType.NVarChar, 50)).Value = prod.FechaFin;
                sComm.Parameters.Add(new SqlParameter("@fechaconsulta", SqlDbType.DateTime)).Value = System.DateTime.Now;
                sComm.Parameters.Add(new SqlParameter("@idDb", SqlDbType.Int)).Value = strIdDb;

                sConn.Open();

                sComm.Connection = sConn;

                sComm.ExecuteNonQuery();

                sConn.Close();

                ControlLog.writeLog("[crearProducto] Producto creado OK");
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[crearProducto] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        /// <summary>
        /// Modifica un producto en la base de datos
        /// </summary>
        /// <param name="prod">Instancia de la clase Producto con los datos a actualizar en la base de datos</param>
        public void modificarProducto(Producto prod)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "UPDATE productos SET idcompetidor=@idcompetidor, idpublicacion=@idpublicacion, link=@link, titulo=@titulo, moneda=@moneda, precio=@precio, cantvendido=@cantvendido, " +
                                                         "estado=@estado, fechainicio=@fechainicio, fechafin=@fechafin, fechaconsulta=@fechaconsulta WHERE idpublicacion=@idpublicacion";

                sComm.Parameters.Add(new SqlParameter("@idcompetidor", SqlDbType.Int)).Value = prod.IdCompetidor;
                sComm.Parameters.Add(new SqlParameter("@idpublicacion", SqlDbType.NVarChar, 50)).Value = prod.IdPublicacion;
                sComm.Parameters.Add(new SqlParameter("@link", SqlDbType.NVarChar, 200)).Value = prod.Link;
                sComm.Parameters.Add(new SqlParameter("@titulo", SqlDbType.NVarChar, 100)).Value = prod.Titulo;
                sComm.Parameters.Add(new SqlParameter("@moneda", SqlDbType.NVarChar, 50)).Value = prod.Moneda;
                sComm.Parameters.Add(new SqlParameter("@precio", SqlDbType.Float)).Value = prod.Precio;
                sComm.Parameters.Add(new SqlParameter("@cantvendido", SqlDbType.Int)).Value = prod.CantVendido;
                sComm.Parameters.Add(new SqlParameter("@estado", SqlDbType.NVarChar, 50)).Value = prod.Estado;
                sComm.Parameters.Add(new SqlParameter("@fechainicio", SqlDbType.NVarChar, 50)).Value = prod.FechaInicio;
                sComm.Parameters.Add(new SqlParameter("@fechafin", SqlDbType.NVarChar, 50)).Value = prod.FechaFin;
                sComm.Parameters.Add(new SqlParameter("@fechaconsulta", SqlDbType.DateTime)).Value = System.DateTime.Now;

                sConn.Open();

                sComm.Connection = sConn;

                sComm.ExecuteNonQuery();

                sConn.Close();

                ControlLog.writeLog("[modificarProducto] Producto modificado OK");
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[modificarProducto] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        /// <summary>
        /// Elimina un producto de la base de datos
        /// </summary>
        /// <param name="id">ID de la publicación a eliminar</param>
        public void borrarProducto(string id)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM productos where idpublicacion=@idpublicacion";

                sComm.Parameters.Add(new SqlParameter("@idpublicacion", SqlDbType.NVarChar, 50)).Value = id;

                sConn.Open();

                sComm.Connection = sConn;

                sComm.ExecuteNonQuery();

                sConn.Close();

                ControlLog.writeLog("[borrarProducto] Producto eliminado OK");
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[borrarProducto] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        public bool borrarProductoDeCompetidor(string id)
        {
            SqlConnection sConn = new SqlConnection();
            SqlDataReader sReader;
            SqlCommand sCommand = new SqlCommand();
            sConn.ConnectionString = _strConnectionString;
            try
            {
                sCommand.CommandType = CommandType.Text;
                sCommand.CommandText = "DELETE FROM Productos WHERE idDb=@idCompetidor";

                ControlLog.writeLog("[borrarProducto] DELETE FROM Productos WHERE idDb=" + id);
                sCommand.Parameters.Add(new SqlParameter("@idCompetidor", SqlDbType.Int)).Value = id;
                sCommand.Parameters.Add("@Return", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
                sConn.Open();

                try
                {
                    sCommand.Connection = sConn;
                    sReader = sCommand.ExecuteReader();
                    while (sReader.Read())
                    {
                        //     Read your data 
                    }
                }
                catch (Exception innerEx)
                {
                    ControlLog.writeLog("[borrarProducto] Excepcion DB: " + innerEx.Message);
                }

                sConn.Close();
            }
            catch (Exception ee)
            {
                ControlLog.writeLog("[borrarProducto] Excepcion General: " + ee.Message);
            }
            return true;
        }

        public Producto getProductoPK(string id)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            Producto prod = new Producto();

            ControlLog.writeLog("[getProductoPK] ID de Producto a buscar: " + id);

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT * FROM productos WHERE idpublicacion=@idpublicacion";

                sComm.Parameters.Add(new SqlParameter("@idpublicacion", SqlDbType.NVarChar, 50)).Value = id;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.Read())
                    prod = armarProducto(sReader);
                else
                    prod = null;

                sConn.Close();

                if (prod != null)
                {
                    ControlLog.writeLog("[getProductoPK] ID de Producto encontrado: " + prod.IdPublicacion);
                }
                else
                {
                    prod = new Producto();
                    prod.CantVendido = "NO DISPONIBLE";
                    prod.Estado = EstadoProducto.INEXISTENTE;
                    prod.Link = "NO DISPONIBLE";
                    prod.Titulo = "NO DISPONIBLE";
                    prod.Moneda = Monedas.Otro;
                    prod.Precio = "NO DISPONIBLE";
                    ControlLog.writeLog("[getProductoPK] No se encontro el producto (Id = " + id + ")");
                }

                return prod;
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[getProductoPK] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        /// <summary>
        ///  Obtiene una lista de productos pertenecientes al competidor elegido.
        /// </summary>
        /// <param name="id">String Id del competidor (Id de DB)</param>
        /// <returns> Lista de Productos del Competidor</returns>
        public List<Producto> getListaProductosFK(string id)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            Producto prod = new Producto();
            List<Producto> lstProd = new List<Producto>();

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT * FROM productos WHERE idDb=@idcompetidor";

                sComm.Parameters.Add(new SqlParameter("@idcompetidor", SqlDbType.Int)).Value = id;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    prod = armarProducto(sReader);
                    lstProd.Add(prod);
                }

                sConn.Close();

                ControlLog.writeLog("[getListaProductosFK] Productos encontrados: " + lstProd.Count.ToString());
                return lstProd;
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[getListaProductosFK] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        public ArrayList getProductoFK(string id)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            Producto prod = new Producto();
            ArrayList myAlProd = new ArrayList();

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT * FROM productos WHERE idcompetidor=@idcompetidor";
                ControlLog.writeLog("[getProductoFK] SELECT * FROM productos WHERE idcompetidor=" + id);
                sComm.Parameters.Add(new SqlParameter("@idcompetidor", SqlDbType.Int)).Value = id;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    prod = armarProducto(sReader);
                    myAlProd.Add(prod);
                }

                sConn.Close();


                ControlLog.writeLog("[getProductoFK] Productos encontrados: " + myAlProd.Count.ToString());
                return myAlProd;
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[getProductoFK] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }
        /// <summary>
        /// Devuelve una lista con todos los ID de Publicacion que existen por CALIFICACIONEs
        /// </summary>
        /// <param name="id">ID de DB del Competidor</param>
        /// <returns> Lista con ID de Publicacion en formato String </returns>
        public List<string> getProductoDeCalificaciones(string id)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            List<string> lstIdPublicacion = new List<string>();

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT idProducto FROM calificaciones WHERE idcompetidorDb=@idcompetidorDb";
                ControlLog.writeLog("[getProductoDeCalificaciones] SELECT idProducto FROM calificaciones WHERE idcompetidorDb=" + id);
                sComm.Parameters.Add(new SqlParameter("@idcompetidorDb", SqlDbType.Int)).Value = id;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    lstIdPublicacion.Add(sReader[0].ToString());
                }

                sConn.Close();


                ControlLog.writeLog("[getProductoDeCalificaciones] Productos encontrados por calificaciones: " + lstIdPublicacion.Count.ToString());
                return lstIdPublicacion;
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[getProductoDeCalificaciones] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }


        public int getCantidadProductos(string sIdML)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            int iCant = 0;

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT COUNT(idpublicacion) FROM productos where idcompetidor=@idcompetidor";

                sComm.Parameters.Add(new SqlParameter("@idcompetidor", SqlDbType.Int)).Value = sIdML;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.Read())
                    iCant = Convert.ToInt32(sReader[0].ToString());

                sConn.Close();

                ControlLog.writeLog("[getCantidadProductos] Cantidad de productos" + iCant.ToString());

                return iCant;
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[getCantidadProductos] Excepcion DB" + ex.Message);
                throw ex;
            }
        }
        #endregion

        #region Rubros
        /// <summary>
        /// Obtiene el ID del rubro en la base de datos para el rubro informado
        /// </summary>
        /// <param name="nombre">Descripción del rubro</param>
        /// <returns>ID del rubro</returns>
        public string getIDRubro(string nombre)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string id = null;

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT idRubro FROM rubros WHERE descRubro=@nombre";

                sComm.Parameters.Add(new SqlParameter("@nombre", SqlDbType.NVarChar, 50)).Value = nombre;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.Read())
                    id = sReader[0].ToString();

                sConn.Close();

                ControlLog.writeLog("[getIDRubro] Rubro encontrado. Id =  " + id.ToString());
                return id;
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[getIDRubro] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        /// <summary>
        /// Crea un Rubro en la DB
        /// </summary>
        /// <param name="rub">Instancia de la clase Rubro con la info del rubro</param>
        public void crearRubro(Rubro rub)
        {
            SqlConnection sConn = new SqlConnection();
            SqlDataReader sReader;
            SqlCommand sCommand = new SqlCommand();
            sConn.ConnectionString = _strConnectionString;
            try
            {
                sCommand.CommandType = CommandType.Text;
                sCommand.CommandText = "INSERT INTO Rubros (descRubro) VALUES (@descRubro)";

                ControlLog.writeLog("[crearRubro] INSERT INTO Rubros (descRubro) VALUES ('" + rub.Nombre + "')");
                sCommand.Parameters.Add(new SqlParameter("@descRubro", SqlDbType.VarChar, 50)).Value = rub.Nombre;
                sCommand.Parameters.Add("@Return", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
                sConn.Open();

                try
                {
                    sCommand.Connection = sConn;
                    sReader = sCommand.ExecuteReader();
                    while (sReader.Read())
                    {
                        //     Read your data 
                    }
                }
                catch (Exception innerEx)
                {
                    ControlLog.writeLog("[crearRubro] Excepcion DB: " + innerEx.Message);
                }

                sConn.Close();
            }
            catch (Exception ee)
            {
                ControlLog.writeLog("[crearRubro] Excepcion General: " + ee.Message);
            }
        }

        /// <summary>
        /// Borra un rubro de la DB
        /// </summary>
        /// <param name="intIdRubro"> Id de Rubro</param>
        public void borrarRubro(int intIdRubro)
        {
            SqlConnection sConn = new SqlConnection();
            SqlDataReader sReader;
            SqlCommand sCommand = new SqlCommand();
            sConn.ConnectionString = _strConnectionString;
            try
            {
                sCommand.CommandType = CommandType.Text;
                sCommand.CommandText = "DELETE FROM Rubros WHERE idRubro=@idRubro";

                ControlLog.writeLog("[borrarRubro] DELETE FROM Rubros WHERE idRubro=" + intIdRubro.ToString());
                sCommand.Parameters.Add(new SqlParameter("@idRubro", SqlDbType.Int)).Value = intIdRubro;
                sCommand.Parameters.Add("@Return", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
                sConn.Open();

                try
                {
                    sCommand.Connection = sConn;
                    sReader = sCommand.ExecuteReader();
                    while (sReader.Read())
                    {
                        //     Read your data 
                    }
                }
                catch (Exception innerEx)
                {
                    ControlLog.writeLog("[borrarRubro] Excepcion DB: " + innerEx.Message);
                }

                sConn.Close();
            }
            catch (Exception ee)
            {
                ControlLog.writeLog("[borrarRubro] Excepcion General: " + ee.Message);
            }
        }
        #endregion

        #region Competidores
        /// <summary>
        /// Crea un nuevo competidor en la DB. Verificada PR - HZ 04/01/2012
        /// </summary>
        /// <param name="comp">Instancia de la Clase Competidor con los datos del competidor a agregar</param>
        public void crearCompetidor(Competidor comp)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO competidores (idml, nickname, idrubro, descripcion, link, cantpublicaciones, txtotal, " +
                                                               "txcompletadas, txcanceladas, rankpositivo, ranknegativo, rankneutro, estadoCompetidor, ultimaActualizacion) " +
                                                "VALUES (@idml, @nickname, @idrubro, @descripcion, @link, @cantpublicaciones, @txtotal, " +
                                                          "@txcompletadas, @txcanceladas, @rankpositivo, @ranknegativo, @rankneutro, @estadoCompetidor, @ultimaActualizacion)";

                sComm.Parameters.Add(new SqlParameter("@idml", SqlDbType.Int)).Value = comp.IdML;
                sComm.Parameters.Add(new SqlParameter("@nickname", SqlDbType.VarChar, 50)).Value = comp.Nickname;
                sComm.Parameters.Add(new SqlParameter("@idrubro", SqlDbType.Int)).Value = comp.IdRubro;
                sComm.Parameters.Add(new SqlParameter("@descripcion", SqlDbType.VarChar, 50)).Value = comp.Descripcion;
                sComm.Parameters.Add(new SqlParameter("@link", SqlDbType.VarChar, 200)).Value = comp.Link;
                sComm.Parameters.Add(new SqlParameter("@cantpublicaciones", SqlDbType.Int)).Value = comp.getEstadisticas().CantPublicaciones;
                sComm.Parameters.Add(new SqlParameter("@txtotal", SqlDbType.Int)).Value = comp.getEstadisticas().TxTotal;
                sComm.Parameters.Add(new SqlParameter("@txcompletadas", SqlDbType.Int)).Value = comp.getEstadisticas().TxCompletadas;
                sComm.Parameters.Add(new SqlParameter("@txcanceladas", SqlDbType.Int)).Value = comp.getEstadisticas().TxCanceladas;
                sComm.Parameters.Add(new SqlParameter("@rankpositivo", SqlDbType.Float)).Value = comp.getEstadisticas().RankPositivo;
                sComm.Parameters.Add(new SqlParameter("@ranknegativo", SqlDbType.Float)).Value = comp.getEstadisticas().RankNegativo;
                sComm.Parameters.Add(new SqlParameter("@rankneutro", SqlDbType.Float)).Value = comp.getEstadisticas().RankNeutro;
                sComm.Parameters.Add(new SqlParameter("@estadoCompetidor", SqlDbType.VarChar, 20)).Value = comp.getEstadisticas().Estado;
                sComm.Parameters.Add(new SqlParameter("@ultimaActualizacion", SqlDbType.DateTime)).Value = System.DateTime.Now;

                sConn.Open();

                sComm.Connection = sConn;

                sComm.ExecuteNonQuery();

                sConn.Close();
                ControlLog.writeLog("[crearCompetidor] Competidor Agregado OK");
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[crearCompetidor] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        /// <summary>
        /// Se obtiene toda la informacion asociada a un competidor y se la guarda en una instancia de clase Competidor
        /// </summary>
        /// <param name="id"> ID de ML </param>
        /// <returns></returns>
        public Competidor getCompetidor(string id)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            Competidor comp = new Competidor();

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT * FROM competidores WHERE idml=@idml";

                sComm.Parameters.Add(new SqlParameter("@idml", SqlDbType.Int)).Value = Convert.ToInt32(id);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.Read())
                    comp = armarCompetidor(sReader);

                sConn.Close();

                ControlLog.writeLog("[getCompetidor] Se encontro un competidor - ID: " + comp.IdML + " NickName: " + comp.Nickname);
                return comp;
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[getCompetidor] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        /// <summary>
        /// Retorna el ID auto incremental de la DB
        /// </summary>
        /// <param name="id"> ID de ML </param>
        /// <returns></returns>
        public int getIdDbCompetidor(string id)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            int intIdDbCompetidor = 0;

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT id FROM competidores WHERE idml=@idml";

                sComm.Parameters.Add(new SqlParameter("@idml", SqlDbType.Int)).Value = Convert.ToInt32(id);


                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.Read())
                {
                    intIdDbCompetidor = Convert.ToInt32(sReader["id"].ToString());
                }

                sConn.Close();

                ControlLog.writeLog("[getIdDbCompetidor] Se encontro un competidor - ID: " + intIdDbCompetidor);
                return intIdDbCompetidor;
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[getIdDbCompetidor] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }


        /// <summary>
        /// Retorna el ID de ML desde el Id autoincremental
        /// </summary>
        /// <param name="id"> ID de la DB</param>
        /// <returns></returns>
        public int getIdMLCompetidor(string id)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            int intIdMlCompetidor = 0;

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT idml FROM competidores WHERE id=@id";

                sComm.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = Convert.ToInt32(id);


                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.Read())
                {
                    intIdMlCompetidor = Convert.ToInt32(sReader["idml"].ToString());
                }

                sConn.Close();

                ControlLog.writeLog("[getIdMLCompetidor] Se encontro un competidor - ID: " + intIdMlCompetidor);
                return intIdMlCompetidor;
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[getIdMLCompetidor] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        /// <summary>
        /// Averigua si existe el competidor en la base de datos
        /// </summary>
        /// <param name="id"> ID de ML </param>
        /// <returns></returns>
        public bool existeCompetidor(string id)
        {
            bool boolResult = false;
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT * FROM competidores WHERE idml=@idml";

                sComm.Parameters.Add(new SqlParameter("@idml", SqlDbType.Int)).Value = Convert.ToInt32(id);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                boolResult = sReader.HasRows;

                sConn.Close();

                ControlLog.writeLog("[existeCompetidor] Resultado de la verificacion: " + boolResult.ToString());
                return boolResult;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[existeCompetidor] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        /// <summary>
        /// Elimina un competidor de la lista de competidores
        /// </summary>
        /// <param name="intIdCompetidor"> ID de ML</param>
        /// <returns></returns>
        public bool borrarCompetidor(int intIdCompetidor)
        {
            SqlConnection sConn = new SqlConnection();
            SqlDataReader sReader;
            SqlCommand sCommand = new SqlCommand();
            sConn.ConnectionString = _strConnectionString;
            try
            {
                sCommand.CommandType = CommandType.Text;
                sCommand.CommandText = "DELETE FROM Competidores WHERE id=@idCompetidor";

                ControlLog.writeLog("[borrarCompetidor] DELETE FROM Competidores WHERE id=" + intIdCompetidor.ToString());
                sCommand.Parameters.Add(new SqlParameter("@idCompetidor", SqlDbType.Int)).Value = intIdCompetidor;
                sCommand.Parameters.Add("@Return", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
                sConn.Open();

                try
                {
                    sCommand.Connection = sConn;
                    sReader = sCommand.ExecuteReader();
                    while (sReader.Read())
                    {
                        //     Read your data 
                    }
                }
                catch (Exception innerEx)
                {
                    ControlLog.writeLog("[borrarCompetidor] Excepcion DB: " + innerEx.Message);
                }

                sConn.Close();
            }
            catch (Exception ee)
            {
                ControlLog.writeLog("[borrarCompetidor] Excepcion General: " + ee.Message);
            }
            return true;
        }

        /// <summary>
        /// Obtiene la cantidad de competidores de la base de datos
        /// </summary>
        /// <returns>Cantidad de competidores encontrados en la base de datos</returns>
        public int getCantidadCompetidores()
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            int iCant = 0;

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT COUNT(idml) FROM competidores";

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.Read())
                    iCant = Convert.ToInt32(sReader[0].ToString());

                sConn.Close();

                ControlLog.writeLog("[getCantidadCompetidores] Cantidad de Competidores" + iCant.ToString());

                return iCant;
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[getCantidadCompetidores] Excepcion DB" + ex.Message);
                throw ex;
            }
        }
        #endregion

        #region Armado de Objetos a devolver
        private Competidor armarCompetidor(SqlDataReader sReader)
        {
            Competidor comp = new Competidor();

            comp.IdML = sReader["idml"].ToString();
            comp.Nickname = sReader["nickname"].ToString();
            comp.IdRubro = sReader["idrubro"].ToString();
            comp.Descripcion = sReader["descripcion"].ToString();
            comp.Link = sReader["link"].ToString();

            return comp;
        }

        private Calificacion armarCalificacion(SqlDataReader sReader)
        {
            Calificacion objCalificacion = new Calificacion();
            int intTipoCalificacion = 0;
            objCalificacion.Fecha = sReader["fechaCalificacion"].ToString();
            intTipoCalificacion = Convert.ToInt32(sReader["tipoCalificacion"].ToString());
            switch (intTipoCalificacion)
            {
                case 0: //Positiva
                    objCalificacion.Calification = Calificaciones.POSITIVA;
                    break;
                case 1: //Neutral
                    objCalificacion.Calification = Calificaciones.NEUTRAL;
                    break;
                case 2: //Negativa
                    objCalificacion.Calification = Calificaciones.NEGATIVA;
                    break;

            }

            objCalificacion.Comentario = sReader["calificacion"].ToString();
            objCalificacion.LinkUsuario = sReader["linkUsuarioML"].ToString();
            objCalificacion.NickUsuario = sReader["idNickNameUsuario"].ToString();
            objCalificacion.Prod = new Producto();
            objCalificacion.Prod.IdPublicacion = sReader["idProducto"].ToString();
            objCalificacion.Prod.Titulo = sReader["tituloProducto"].ToString();
            objCalificacion.Prod.Precio = sReader["precioProducto"].ToString();
            objCalificacion.Prod.Link = sReader["linkProducto"].ToString();
            switch (sReader["estadoProducto"].ToString())
            {
                case "INACTIVO":
                    objCalificacion.Prod.Estado = EstadoProducto.INACTIVO;
                    break;
                case "INEXISTENTE":
                    objCalificacion.Prod.Estado = EstadoProducto.INEXISTENTE;
                    break;
                case "NUEVO":
                    objCalificacion.Prod.Estado = EstadoProducto.NUEVO;
                    break;
                case "USADO":
                    objCalificacion.Prod.Estado = EstadoProducto.USADO;
                    break;
                default:
                    throw new Exception("No se encontro el estado = " + sReader["estadoProducto"].ToString());
                    break;
            }

            switch (sReader["monedaProducto"].ToString())
            {
                case "DOLARES":
                    objCalificacion.Prod.Moneda = Monedas.DOLARES;
                    break;
                case "NO_DISPONIBLE":
                    objCalificacion.Prod.Moneda = Monedas.NO_DISPONIBLE;
                    break;
                case "Otro":
                    objCalificacion.Prod.Moneda = Monedas.Otro;
                    break;
                case "PESOS":
                    objCalificacion.Prod.Moneda = Monedas.PESOS;
                    break;
                default:
                    throw new Exception("No se encontro la moneda = " + sReader["monedaProducto"].ToString());
                    break;
            }


            return objCalificacion;
        }

        private Producto armarProducto(SqlDataReader sReader)
        {
            Producto prod = new Producto();

            prod.IdCompetidor = sReader["idcompetidor"].ToString();
            prod.IdPublicacion = sReader["idpublicacion"].ToString();
            prod.Link = sReader["link"].ToString();
            prod.Titulo = sReader["titulo"].ToString();
            if (sReader["moneda"].ToString() == "PESOS" || sReader["moneda"].ToString() == "pesos")
                prod.Moneda = Monedas.PESOS;
            else
                if (sReader["moneda"].ToString() == "DOLARES" || sReader["moneda"].ToString() == "dolares")
                    prod.Moneda = Monedas.DOLARES;
                else
                    prod.Moneda = Monedas.Otro;
            prod.Precio = sReader["precio"].ToString();
            prod.CantVendido = sReader["cantvendido"].ToString();
            if (sReader["estado"].ToString() == "NUEVO" || sReader["estado"].ToString() == "nuevo")
                prod.Estado = EstadoProducto.NUEVO;
            else
                prod.Estado = EstadoProducto.USADO;
            prod.FechaInicio = sReader["fechainicio"].ToString();
            prod.FechaFin = sReader["fechafin"].ToString();

            return prod;
        }
        #endregion

        #region Login Usuario
        /// <summary>
        /// Loguea un usuario al sistema, comprobando su identidad en la base de datos
        /// </summary>
        /// <param name="sUsuario">Nombre de Usuario</param>
        /// <param name="sPassword">Password de Usuario</param>
        /// <returns></returns>
        public bool loguearUsuario(string sUsuario, string sPassword)
        {

            SqlConnection sConn = new SqlConnection();
            SqlDataReader sReader;
            SqlCommand sCommand = new SqlCommand();


            try
            {

                sConn.ConnectionString = "data source=.;integrated security=SSPI;initial catalog=w1550972_mym";


                sCommand.CommandType = CommandType.Text;


                sCommand.CommandText = "SELECT @idUsuario=idUsuario FROM Usuarios WHERE usuario = @usuario AND password = @password";


                sCommand.Parameters.Add(new SqlParameter("@usuario", SqlDbType.VarChar, 50)).Value = sUsuario;
                sCommand.Parameters.Add(new SqlParameter("@password", SqlDbType.VarChar, 50)).Value = sPassword;
                sCommand.Parameters.Add(new SqlParameter("@idUsuario", SqlDbType.Int)).Direction = ParameterDirection.Output;


                sCommand.Parameters.Add("@Return", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;


                sConn.Open();


                sCommand.Connection = sConn;


                sReader = sCommand.ExecuteReader();

                while (sReader.Read())
                {
                    //     Read your data 
                }


                sConn.Close();

                try
                {

                    int idUsuario = Convert.ToInt32(sCommand.Parameters["@idUsuario"].Value);
                }
                catch
                {

                    return false;
                }


            }
            catch (Exception except)
            {

                WebMsgBox.Show("Excepcion conectando a DB " + except.Message);
                return false;
            }

            return true;
        }
        #endregion

        #region Guardar Publicacion

        public bool guardarPublicacion(ControlPublicacionProductoML objProducto)
        {
            SqlConnection sConn = new SqlConnection();
            SqlDataReader sReader;
            SqlCommand sCommand = new SqlCommand();

            try
            {

                sConn.ConnectionString = _strConnectionString;
                sCommand.CommandType = CommandType.Text;

                sCommand.CommandText = "INSERT INTO ItemsPublicados (titulo,subtitulo,cantidad,precio,fechaPublicacion,idMLDePublicacion,linkDePublicacion) VALUES " +
                                        "('" + objProducto.getTitulo() + "','" + objProducto.getSubTitulo() + "'," + objProducto.getCantidad() + "," + objProducto.getPrecio() + ",GETDATE()," + objProducto.getIdMl() + ",'" + objProducto.getLinkDePublicacion() + "')";

                ControlLog.writeLog("[guardarPublicacion] " + sCommand.CommandText);

                sConn.Open();
                sCommand.Connection = sConn;
                sReader = sCommand.ExecuteReader();
                sConn.Close();

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[guardarPublicacion] Excepcion DB:  " + ex.Message);
                throw ex;
            }

            return true;
        }

        /// <summary>
        /// DEPRECADO guardarPublicacion guarda la publicación exitosa de ML como un registro dentro de la base de datos de la pagina.
        /// </summary>
        /// <param name="strIdMLdePublicacion"> Id de Publicación devuelto por ML</param>
        /// <param name="strTitulo">Título de la publicación</param>
        /// <param name="strSubtitulo">Subtítulo de la publicación</param>
        /// <param name="intCantidad">Cantidad de items publicados del mismo tipo</param>
        /// <param name="strPrecio">Precio unitario por item</param>
        /// <param name="dtFechaPublicacion">Fecha en la que se realizo la publicación</param>
        /// <param name="strLinkDePublicacion">Link para ver la publicacion en ML</param>
        /// <returns></returns>
        public bool guardarPublicacion(string strIdMLdePublicacion, string strTitulo, string strSubtitulo, int intCantidad, string strPrecio, DateTime dtFechaPublicacion, string strLinkDePublicacion)
        {

            SqlConnection sConn = new SqlConnection();
            SqlDataReader sReader;
            SqlCommand sCommand = new SqlCommand();
            Decimal decMonto = 0;


            try
            {

                sConn.ConnectionString = "data source=.;integrated security=SSPI;initial catalog=w1550972_mym";


                sCommand.CommandType = CommandType.Text;


                sCommand.CommandText = "INSERT INTO ItemsPublicados (titulo,subtitulo,cantidad,precio,fechaPublicacion,idMLDePublicacion,linkDePublicacion) VALUES " +
                                        "(@titulo,@subtitulo,@cantidad,@precio,@fechaPublicacion,@idMLDePublicacion,@linkPublicacion)";


                sCommand.Parameters.Add(new SqlParameter("@titulo", SqlDbType.VarChar, 50)).Value = strTitulo;
                sCommand.Parameters.Add(new SqlParameter("@subtitulo", SqlDbType.VarChar, 50)).Value = strSubtitulo;
                sCommand.Parameters.Add(new SqlParameter("@cantidad", SqlDbType.Int)).Value = intCantidad;

                if (strPrecio.StartsWith("$"))
                {

                    strPrecio = strPrecio.Substring(1);

                    ControlLog.writeLog("[guardarPublicacion] Signo $ detectado " + strPrecio);
                }
                else
                {
                    ControlLog.writeLog("[guardarPublicacion] Signo $ NO detectado ");

                }

                strPrecio = strPrecio.Replace('.', ',');

                ControlLog.writeLog("[guardarPublicacion] Precio publicacion " + strPrecio);
                sCommand.Parameters.Add(new SqlParameter("@precio", SqlDbType.Money)).Value = Convert.ToDecimal(strPrecio);
                sCommand.Parameters.Add(new SqlParameter("@fechaPublicacion", SqlDbType.DateTime)).Value = Convert.ToDateTime(dtFechaPublicacion);
                sCommand.Parameters.Add(new SqlParameter("@idMLDePublicacion", SqlDbType.VarChar, 50)).Value = strIdMLdePublicacion;
                sCommand.Parameters.Add(new SqlParameter("@linkPublicacion", SqlDbType.VarChar, 400)).Value = strLinkDePublicacion;


                sCommand.Parameters.Add("@Return", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;

                try
                {

                    sConn.Open();


                    sCommand.Connection = sConn;

                    sReader = sCommand.ExecuteReader();

                    //            while (sReader.Read())
                    //          {
                    //     Read your data 
                    //         }


                    sConn.Close();


                }
                catch
                {
                    sConn.Close();
                    return false;
                }


            }
            catch (Exception except)
            {

                WebMsgBox.Show("Excepcion conectando a DB " + except.Message);
                return false;
            }

            return true;
        }
        #endregion

        #region Calificaciones
        /// <summary>
        /// Agrega una calificacion a la DB
        /// </summary>
        /// <param name="objCalificacion"> Objeto Calificacion que será guardado en la DB</param>
        public void crearCalificacion(Calificacion objCalificacion, string strIdDb)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO Calificaciones (idProducto,idNickNameUsuario,calificacion,tipoCalificacion,linkUsuarioML,fechaCalificacion,idCompetidorDb, tituloProducto, precioProducto, estadoProducto, monedaProducto, linkProducto) " +
                                            "VALUES (@idProducto,@idNickNameUsuario,@calificacion,@tipoCalificacion,@linkUsuarioML,@fechaCalificacion,@idCompetidorDb, @tituloProducto, @precioProducto, @estadoProducto, @monedaProducto, @linkProducto)";

                sComm.Parameters.Add(new SqlParameter("@idProducto", SqlDbType.VarChar, 50)).Value = objCalificacion.Prod.IdPublicacion;
                sComm.Parameters.Add(new SqlParameter("@tituloProducto", SqlDbType.VarChar, 200)).Value = objCalificacion.Prod.Titulo;
                sComm.Parameters.Add(new SqlParameter("@idNickNameUsuario", SqlDbType.VarChar, 50)).Value = objCalificacion.NickUsuario;
                sComm.Parameters.Add(new SqlParameter("@calificacion", SqlDbType.VarChar, 400)).Value = objCalificacion.Comentario;
                sComm.Parameters.Add(new SqlParameter("@precioProducto", SqlDbType.VarChar, 10)).Value = objCalificacion.Prod.Precio;
                sComm.Parameters.Add(new SqlParameter("@estadoProducto", SqlDbType.VarChar, 50)).Value = objCalificacion.Prod.Estado.ToString();
                sComm.Parameters.Add(new SqlParameter("@monedaProducto", SqlDbType.VarChar, 10)).Value = objCalificacion.Prod.Moneda.ToString();
                sComm.Parameters.Add(new SqlParameter("@linkProducto", SqlDbType.VarChar, 250)).Value = objCalificacion.Prod.Link;

                sComm.Parameters.Add(new SqlParameter("@idCompetidorDb", SqlDbType.Int)).Value = strIdDb;

                switch (objCalificacion.Calification)
                {
                    case Calificaciones.POSITIVA:
                        sComm.Parameters.Add(new SqlParameter("@tipoCalificacion", SqlDbType.Int)).Value = 0;
                        break;

                    case Calificaciones.NEUTRAL:
                        sComm.Parameters.Add(new SqlParameter("@tipoCalificacion", SqlDbType.Int)).Value = 1;
                        break;

                    case Calificaciones.NEGATIVA:
                        sComm.Parameters.Add(new SqlParameter("@tipoCalificacion", SqlDbType.Int)).Value = 2;
                        break;

                }
                sComm.Parameters.Add(new SqlParameter("@linkUsuarioML", SqlDbType.VarChar, 400)).Value = objCalificacion.LinkUsuario;
                sComm.Parameters.Add(new SqlParameter("@fechaCalificacion", SqlDbType.DateTime, 400)).Value = Convert.ToDateTime(objCalificacion.Fecha);

                sConn.Open();

                sComm.Connection = sConn;

                sComm.ExecuteNonQuery();

                sConn.Close();
                ControlLog.writeLog("[crearCalificacion] Calificacion Agregado OK");
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[crearCalificacion] Excepcion DB: " + ex.Message);
                throw ex;
            }



        }

        public List<Calificacion> getListaCalificacionesFK(string strIdDb)
        {
            List<Calificacion> lstCalificaciones = new List<Calificacion>();
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            Calificacion objCalificacion = null;

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT * FROM Calificaciones WHERE idCompetidorDb=@idCompetidor";

                sComm.Parameters.Add(new SqlParameter("@idcompetidor", SqlDbType.Int)).Value = strIdDb;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    ///HZ: Obtiene todos los datos de la tabla CALIFICACIONES, incluyendo el ID de Publicacion.
                    ///La prioridad va a ser ir a buscar el proiducto a la tabla de PRODUCTOS. Pero si no existe
                    ///se usaran los datos del producto que estan en la tabla CALIFICACIONES
                    ///
                    objCalificacion = armarCalificacion(sReader);

                    Producto objProducto = null;

                    objProducto = getProductoPK(objCalificacion.Prod.IdPublicacion);

                    if (objProducto.Estado != EstadoProducto.INEXISTENTE)
                    {
                        objCalificacion.Prod = objProducto;
                    }
                    else
                    {
                        if (objCalificacion.Prod.Link == null) //Un valor bajito, quiere decir que no tiene nada.
                        {

                            objCalificacion.Prod.Link = "NO DISPONIBLE";
                        }
                        if (objCalificacion.Prod.Titulo.Length < 2) //Un valor bajito, quiere decir que no tiene nada.
                        {

                            objCalificacion.Prod.Titulo = "NO DISPONIBLE";
                        }
                        if (objCalificacion.Prod.Precio.Length < 1) //Un valor bajito, quiere decir que no tiene nada.
                        {
                            objCalificacion.Prod.Precio = "NO DISPONIBLE";
                        }

                        /*
                        objCalificacion.Prod.Estado = EstadoProducto.INEXISTENTE;
                        objCalificacion.Prod.Moneda = Monedas.NO_DISPONIBLE;
                        */

                    }

                    ControlLog.writeLog("[getListaCalificacionesFK]  Fecha: " + objCalificacion.Fecha);
                    ControlLog.writeLog("[getListaCalificacionesFK]  Link: " + objCalificacion.Prod.Link);
                    ControlLog.writeLog("[getListaCalificacionesFK]  Titulo: " + objCalificacion.Prod.Titulo);
                    ControlLog.writeLog("[getListaCalificacionesFK]  Estado: " + objCalificacion.Prod.Estado);
                    ControlLog.writeLog("[getListaCalificacionesFK]  Moneda: " + objCalificacion.Prod.Moneda.ToString());
                    ControlLog.writeLog("[getListaCalificacionesFK]  NickUsuario: " + objCalificacion.NickUsuario);
                    ControlLog.writeLog("[getListaCalificacionesFK]  LinkUsuario: " + objCalificacion.LinkUsuario);
                    ControlLog.writeLog("[getListaCalificacionesFK]  Calification: " + objCalificacion.Calification.ToString());
                    ControlLog.writeLog("[getListaCalificacionesFK]  Comentario: " + objCalificacion.Comentario);

                    lstCalificaciones.Add(objCalificacion);
                }
                sConn.Close();
                ControlLog.writeLog("[getListaCalificacionesFK] Calificaciones encontradas: " + lstCalificaciones.Count.ToString());
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[getListaCalificacionesFK] Excepcion DB: " + ex.Message);
                throw ex;
            }
            return lstCalificaciones;
        }

        /// <summary>
        /// Borra todas las calificaciones realizadas a los productos de un Competidor
        /// </summary>
        /// <param name="strIdDb"> Id de DB del Competidor en cuestion</param>
        public void borrarCalificacion(string strIdDb)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM Calificaciones WHERE idCompetidorDb= @idCompetidor";


                sComm.Parameters.Add(new SqlParameter("@idCompetidor", SqlDbType.Int)).Value = strIdDb;
                sConn.Open();

                sComm.Connection = sConn;

                sComm.ExecuteNonQuery();

                sConn.Close();
                ControlLog.writeLog("[borrarCalificacion] Calificaciones Borradas OK");
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[borrarCalificacion] Excepcion DB: " + ex.Message);
                throw ex;
            }

        }

        /// <summary>
        /// Obtiene la lista de Calificaciones correspondientes a la fecha más reciente
        /// </summary>
        /// <returns>Lista de instancias de clase Calificacion con todos sus datos</returns>
        public List<Calificacion> getCalificacionMasReciente(string strIdDb)
        {
            List<Calificacion> lstCalif = new List<Calificacion>();
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            Calificacion objCalificacion = null;

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT * FROM CALIFICACIONES WHERE idCompetidorDb=" + strIdDb +
                                    " AND fechaCalificacion = " +
                                    "(SELECT TOP 1 fechaCalificacion FROM Calificaciones ORDER BY fechaCalificacion DESC)";

                ControlLog.writeLog("[getCalificacionMasReciente] SQL Query =" + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    objCalificacion = armarCalificacion(sReader);
                    //Lo unico que obtiene del Producto es el ID... debo buscar el producto ahora
                    Producto objProducto = null;

                    objProducto = getProductoPK(objCalificacion.Prod.IdPublicacion);

                    if (objProducto.Estado != EstadoProducto.INEXISTENTE)
                        objCalificacion.Prod = objProducto;

                    lstCalif.Add(objCalificacion);
                }
                return lstCalif;
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[getCalificacionMasReciente] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }
        #endregion

        #region Publicaciones Pendientes

        public void denunciarLinksDeImagenesCorrompidas(ControlImportacionProductoMLImagen objImagenesRotasParam, int intIdPublicacionParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO PUBLICACIONIMAGENESLINKSROTOS (linkImagen,idPublicacion,fecha) VALUES ('" + objImagenesRotasParam.strLinkImagen + "'," + intIdPublicacionParam.ToString() + ",GETDATE())";
                strQuery = sComm.CommandText;

                //   ControlLog.writeLog("[denunciarLinksDeImagenesCorrompidas] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[denunciarLinksDeImagenesCorrompidas] Excepcion DB: " + ex.Message + " SQL QUERY=" + strQuery);
                throw ex;
            }
        }


        public void finalizarPublicacionPendiente(ControlImportacionProductoML objProductoAPublicar)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "UPDATE PUBLICACIONMANAGER SET idEstado =" + ((int)EstadoPublicacion.Publicada).ToString() + " WHERE idPublicacion=" + objProductoAPublicar.intIdPublicacion.ToString();


                ControlLog.writeLog("[finalizarPublicacionPendiente] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[denunciarLinksDeImagenesCorrompidas] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        public List<ControlImportacionProductoML> obtenerPublicacionesPendientes(string strUsuarioParam)
        {
            List<ControlImportacionProductoML> lstProductosPendientes = new List<ControlImportacionProductoML>();
            ControlLog.writeLog("[obtenerPublicacionesPendientes] Publicaciones pendientes de Usuario =" + strUsuarioParam);
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT p.IdPublicacion,p.Precio,p.Titulo,p.Header,p.Description,p.Features,p.Specifications,p.Bottom,p.Marquee1,p.Marquee2,p.Marquee3,p.Marquee4,p.Marquee5,p.Marquee6,p.Marquee7,p.Marquee8,p.Marquee9,p.Marquee10,p.Text1,p.Text2,p.Text3,p.Subtitle,p.Quantity,p.Currency,p.Categoria,p.DescripcionTitle,p.CaracteristicasTitle,p.FeatureTitle,p.LinkVideoYouTube,p.Condition,p.HTML FROM PUBLICACIONMANAGER pm INNER JOIN PUBLICACION p ON p.idPublicacion = pm.idPublicacion WHERE pm.idUsuario=" + this.obtenerIdUsuarioDeNickName(strUsuarioParam) + " AND pm.idEstado = " + ((int)EstadoPublicacion.Pendiente).ToString();
                strQuery = sComm.CommandText;
                ControlLog.writeLog("[obtenerPublicacionesPendientes] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    ControlImportacionProductoML objProductoLeido = new ControlImportacionProductoML();
                    objProductoLeido.intIdPublicacion = Convert.ToInt32(sReader[0].ToString());
                    objProductoLeido.Price = sReader[1].ToString();
                    objProductoLeido.Title = sReader[2].ToString();
                    objProductoLeido.Header = sReader[3].ToString();
                    objProductoLeido.Description = sReader[4].ToString();
                    objProductoLeido.Features = sReader[5].ToString();
                    objProductoLeido.Specifications = sReader[6].ToString();
                    objProductoLeido.Bottom = sReader[7].ToString();
                    objProductoLeido.Marquee_1 = sReader[8].ToString();
                    objProductoLeido.Marquee_2 = sReader[9].ToString();
                    objProductoLeido.Marquee_3 = sReader[10].ToString();
                    objProductoLeido.Marquee_4 = sReader[11].ToString();
                    objProductoLeido.Marquee_5 = sReader[12].ToString();
                    objProductoLeido.Marquee_6 = sReader[13].ToString();
                    objProductoLeido.Marquee_7 = sReader[14].ToString();
                    objProductoLeido.Marquee_8 = sReader[15].ToString();
                    objProductoLeido.Marquee_9 = sReader[16].ToString();
                    objProductoLeido.Marquee_10 = sReader[17].ToString();
                    objProductoLeido.Text_1 = sReader[18].ToString();
                    objProductoLeido.Text_2 = sReader[19].ToString();
                    objProductoLeido.Text_3 = sReader[20].ToString();
                    objProductoLeido.Subtitle = sReader[21].ToString();
                    objProductoLeido.Quantity = sReader[22].ToString();
                    objProductoLeido.setCurrency(sReader[23].ToString());
                    objProductoLeido.Categoria = sReader[24].ToString();
                    objProductoLeido.DescriptionTitle = sReader[25].ToString();
                    objProductoLeido.SpecificationsTitle = sReader[26].ToString();
                    objProductoLeido.FeatureTitle = sReader[27].ToString();
                    objProductoLeido.VideoLinkYouTube = sReader[28].ToString();
                    objProductoLeido.Condicion = sReader[29].ToString();
                    objProductoLeido.HtmlDescription = sReader[30].ToString();

                    //    ControlLog.writeLog("[obtenerPublicacionesPendientes] HTML Description: " + sReader[30]);
                    //    ControlLog.writeLog("[obtenerPublicacionesPendientes] HTML Description.ToString(): " + sReader[30].ToString());

                    if (objProductoLeido.HtmlDescription != "N/D")
                    {
                        objProductoLeido.htmlMode = true;
                    }

                    objProductoLeido.guardarImagenes(this.obtenerImagenesDePublicacion(objProductoLeido.intIdPublicacion));
                    lstProductosPendientes.Add(objProductoLeido);
                }

                sConn.Close();
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[obtenerPublicacionesPendientes] Excepcion DB: " + ex.Message + " SQL QUERY: " + strQuery);
                throw ex;
            }

            return lstProductosPendientes;
        }

        public ControlImportacionProductoML obtenerPublicacionDeIdDePublicacion(string strIdPublicacionParam)
        {
            ControlImportacionProductoML objProductoLeido = new ControlImportacionProductoML();
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT p.IdPublicacion,p.Precio,p.Titulo,p.Header,p.Description,p.Features,p.Specifications,p.Bottom,p.Marquee1,p.Marquee2,p.Marquee3,p.Marquee4,p.Marquee5,p.Marquee6,p.Marquee7,p.Marquee8,p.Marquee9,p.Marquee10,p.Text1,p.Text2,p.Text3,p.Subtitle,p.Quantity,p.Currency,p.Categoria,p.DescripcionTitle,p.CaracteristicasTitle,p.FeatureTitle,p.LinkVideoYouTube,p.Condition,p.HTML FROM PUBLICACIONMANAGER pm INNER JOIN PUBLICACION p ON p.idPublicacion = pm.idPublicacion WHERE pm.idPublicacion=" + strIdPublicacionParam;
                strQuery = sComm.CommandText;
                ControlLog.writeLog("[obtenerPublicacionDeIdDePublicacion] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.Read())
                {

                    objProductoLeido.intIdPublicacion = Convert.ToInt32(sReader[0].ToString());
                    objProductoLeido.Price = sReader[1].ToString();
                    objProductoLeido.Title = sReader[2].ToString();
                    objProductoLeido.Header = sReader[3].ToString();
                    objProductoLeido.Description = sReader[4].ToString();
                    objProductoLeido.Features = sReader[5].ToString();
                    objProductoLeido.Specifications = sReader[6].ToString();
                    objProductoLeido.Bottom = sReader[7].ToString();
                    objProductoLeido.Marquee_1 = sReader[8].ToString();
                    objProductoLeido.Marquee_2 = sReader[9].ToString();
                    objProductoLeido.Marquee_3 = sReader[10].ToString();
                    objProductoLeido.Marquee_4 = sReader[11].ToString();
                    objProductoLeido.Marquee_5 = sReader[12].ToString();
                    objProductoLeido.Marquee_6 = sReader[13].ToString();
                    objProductoLeido.Marquee_7 = sReader[14].ToString();
                    objProductoLeido.Marquee_8 = sReader[15].ToString();
                    objProductoLeido.Marquee_9 = sReader[16].ToString();
                    objProductoLeido.Marquee_10 = sReader[17].ToString();
                    objProductoLeido.Text_1 = sReader[18].ToString();
                    objProductoLeido.Text_2 = sReader[19].ToString();
                    objProductoLeido.Text_3 = sReader[20].ToString();
                    objProductoLeido.Subtitle = sReader[21].ToString();
                    objProductoLeido.Quantity = sReader[22].ToString();
                    objProductoLeido.setCurrency(sReader[23].ToString());
                    objProductoLeido.Categoria = sReader[24].ToString();
                    objProductoLeido.DescriptionTitle = sReader[25].ToString();
                    objProductoLeido.SpecificationsTitle = sReader[26].ToString();
                    objProductoLeido.FeatureTitle = sReader[27].ToString();
                    objProductoLeido.VideoLinkYouTube = sReader[28].ToString();
                    objProductoLeido.Condicion = sReader[29].ToString();

                    //           ControlLog.writeLog("[obtenerPublicacionDeIdDePublicacion] HTML Description: " + sReader[30]);
                    //           ControlLog.writeLog("[obtenerPublicacionDeIdDePublicacion] HTML Description.ToString(): " + sReader[30].ToString());

                    objProductoLeido.HtmlDescription = sReader[30].ToString();
                    if (objProductoLeido.HtmlDescription != "N/D")
                    {
                        objProductoLeido.htmlMode = true;
                    }

                    objProductoLeido.guardarImagenes(this.obtenerImagenesDePublicacion(objProductoLeido.intIdPublicacion));

                }

                sConn.Close();
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[obtenerPublicacionesPendientes] Excepcion DB: " + ex.Message + " SQL QUERY: " + strQuery);
                throw ex;
            }

            return objProductoLeido;
        }

        private List<ControlImportacionProductoMLImagen> obtenerImagenesDePublicacion(int intIdPublicacion)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            List<ControlImportacionProductoMLImagen> lstImagenes = new List<ControlImportacionProductoMLImagen>();
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT pi.linkImagen,pi.linkImagenLocal FROM PUBLICACIONPUBLICACIONESIMAGENES ppi INNER JOIN PUBLICACIONIMAGENES pi ON pi.IdPublicacionImagenes = ppi.idPublicacionImagen  WHERE ppi.idPublicacion=" + intIdPublicacion.ToString();
                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    ControlImportacionProductoMLImagen objProducto = new ControlImportacionProductoMLImagen();
                    objProducto.strLinkImagen = sReader[0].ToString();
                    objProducto.strLinkImagenLocal = sReader[1].ToString();
                    lstImagenes.Add(objProducto);
                }


                sReader.Close();
                sConn.Close();
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[obtenerImagenesDePublicacion] Excepcion DB: " + ex.Message + " SQL QUERY =" + strQuery);
                throw ex;
            }

            return lstImagenes;
        }

        public void agregarPublicacionesPendientes(ControlImportacionProductoML objPublicacionParam, string strNickUsuario)
        {
            try
            {
                ControlLog.writeLog("[agregarPublicacionesPendientes]: Usuario de la operacion: " + strNickUsuario);
                this.establecerPublicacionPendiente(this.agregarPublicacion(objPublicacionParam), strNickUsuario);

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[agregarPublicacionesPendientes]: EXCEPCION agregando publicacion importada: " + ex.Message);
                throw ex;
            }

        }

        private void establecerPublicacionPendiente(int intPublicacionIdDb, string strNickUsuarioParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT idPublicacionManager FROM PUBLICACIONMANAGER WHERE idPublicacion=" + intPublicacionIdDb.ToString();
                strQuery = sComm.CommandText;
                //ControlLog.writeLog("[establecerPublicacionPendiente] " + sComm.CommandText);
                //ControlLog.writeLog("[establecerPublicacionPendiente] Usuario de la operacion: " + strNickUsuarioParam);
                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.HasRows == true)
                {
                    sComm.CommandText = "UPDATE PUBLICACIONMANAGER SET idEstado =" + ((int)EstadoPublicacion.Pendiente).ToString() + " WHERE idPublicacionManager=" + sReader[0].ToString();
                    strQuery = sComm.CommandText;
                    //  ControlLog.writeLog("[establecerPublicacionPendiente] UPDATE QUERY: " + sComm.CommandText);
                    sReader.Close();
                    sReader = sComm.ExecuteReader();
                }
                else
                {
                    sReader.Close();
                    sComm.CommandText = "INSERT INTO PUBLICACIONMANAGER (idPublicacion,idEstado,FechaDeImportacion,idUsuario) VALUES (" + intPublicacionIdDb.ToString() + "," + ((int)EstadoPublicacion.Pendiente).ToString() + ",GETDATE()," + this.obtenerIdUsuarioDeNickName(strNickUsuarioParam) + ")";
                    strQuery = sComm.CommandText;
                    //   ControlLog.writeLog("[establecerPublicacionPendiente] INSERT QUERY: " + sComm.CommandText);
                    sReader = sComm.ExecuteReader();

                }

                sConn.Close();
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[establecerPublicacionPendiente] Excepcion DB: " + ex.Message + " SQL QUERY =" + strQuery);
                throw ex;
            }
        }

        public string obtenerIdUsuarioDeNickName(string strNickUsuarioParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT idUsuario FROM Usuarios WHERE usuario='" + strNickUsuarioParam + "'";
                strQuery = sComm.CommandText;
                // ControlLog.writeLog("[obtenerIdUsuarioDeNickName] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.Read())
                {
                    string strUsuarioIdDb = sReader[0].ToString();
                    //    ControlLog.writeLog("[obtenerIdUsuarioDeNickName] Usuario Id = " + strUsuarioIdDb);
                    sReader.Close();
                    sConn.Close();
                    return strUsuarioIdDb;
                }

                string strErrorMessage = "No hay usuario con ese NickName en la DB - SQL Query =" + sComm.CommandText;
                sReader.Close();
                sConn.Close();
                throw new Exception(strErrorMessage);

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[obtenerIdUsuarioDeNickName] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        public int agregarPublicacion(ControlImportacionProductoML objPublicacion)
        {

            try
            {
                objPublicacion.intIdPublicacion = this.agregarPublicacionDatosNucleo(objPublicacion);
                this.actualizarPublicacionDatosSecundarios(objPublicacion);

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[agregarPublicacion] Excepcion agregando Publicacion=" + ex.Message);
                throw ex;
            }

            return objPublicacion.intIdPublicacion;
        }



        public void ligarImagenConPublicacion(ControlImportacionProductoML objPublicacion, int intIdDbImagen)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO PUBLICACIONPublicacionesImagenes (IdPublicacion,IdPublicacionImagen) VALUES " +
                                    " (" + objPublicacion.intIdPublicacion.ToString() + "," + intIdDbImagen + ")";
                strQuery = sComm.CommandText;
                //      ControlLog.writeLog("[ligarImagenConPublicacion] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[ligarImagenConPublicacion] Excepcion DB: " + ex.Message + " SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        public int agregarImagen(string strLinkParam, string strLinkLocalParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO PUBLICACIONIMAGENES (linkImagen,linkImagenLocal) VALUES ('" + strLinkParam + "','" + strLinkLocalParam + "')";
                strQuery = sComm.CommandText;
                //                ControlLog.writeLog("[agregarImagen] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return this.obtenerIdImagenDeLinkImagen(strLinkParam, strLinkLocalParam);

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[agregarImagen] Excepcion DB: " + ex.Message + " SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        private int obtenerIdImagenDeLinkImagen(string strLinkParam, string strLinkLocalParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            int intIdLinkImagen = 0;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT TOP 1 idPublicacionImagenes FROM PUBLICACIONIMAGENES with(nolock) WHERE linkImagen='" + strLinkParam + "' AND linkImagenLocal='" + strLinkLocalParam + "'   ORDER BY 1 DESC";

                strQuery = sComm.CommandText;
                //        ControlLog.writeLog("[obtenerIdImagenDeLinkImagen] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.Read())
                {
                    intIdLinkImagen = Convert.ToInt32(sReader[0].ToString());
                }


                sReader.Close();
                sConn.Close();

                return intIdLinkImagen;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[obtenerIdImagenDeLinkImagen] Excepcion DB: " + ex.Message + " SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        public bool existeImagenEnDB(string strLinkParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            bool boolResultado = false;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT TOP 1 idPublicacionImagenes FROM PUBLICACIONIMAGENES with(nolock) WHERE linkImagen='" + strLinkParam + "'   ORDER BY 1 DESC";
                strQuery = sComm.CommandText;

                //ControlLog.writeLog("[existeImagenEnDB] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.HasRows)
                {
                    //         ControlLog.writeLog("[existeImagenEnDB] La Imagen con link=" + strLinkParam + " EXISTE");
                    boolResultado = true;
                }
                else
                {
                    //        ControlLog.writeLog("[existeImagenEnDB] La Imagen con link=" + strLinkParam + " NO EXISTE y debe ser agregada");
                    boolResultado = false;
                }


                sReader.Close();
                sConn.Close();

                return boolResultado;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[existeImagenEnDB] Excepcion DB: " + ex.Message + " SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        private void actualizarPublicacionDatosSecundarios(ControlImportacionProductoML objPublicacion)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "UPDATE PUBLICACION SET " + objPublicacion.obtenerConsultaDeActualizacionParaDatosSecundarios() + " WHERE idPublicacion=" + objPublicacion.intIdPublicacion;

                strQuery = sComm.CommandText;
                ControlLog.writeLog("[actualizarPublicacionDatosSecundarios] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[actualizarPublicacionDatosSecundarios] Excepcion DB: " + ex.Message + " SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        private int agregarPublicacionDatosNucleo(ControlImportacionProductoML objPublicacion)
        {

            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO PUBLICACION (Precio,Titulo,Subtitle,Quantity,Currency,Categoria,DescripcionTitle,CaracteristicasTitle,FeatureTitle) VALUES " +
                                    " ('" + objPublicacion.Price + "','" + objPublicacion.Title + "','" + objPublicacion.Subtitle + "'," + objPublicacion.Quantity + ",'" + objPublicacion.getCurrency() + "','" + objPublicacion.Categoria + "','Descripcion','Especificaciones','Caracteristicas')";

                strQuery = sComm.CommandText;
                //     ControlLog.writeLog("[agregarPublicacionDatosNucleo] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return this.obtenerIdPublicacionDePublicacion(objPublicacion);

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[agregarPublicacionDatosNucleo] Excepcion DB: " + ex.Message + " SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        public int obtenerIdPublicacionDePublicacion(ControlImportacionProductoML objPublicacion)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT TOP 1 idPublicacion FROM PUBLICACION with(nolock) WHERE Precio='" + objPublicacion.Price + "' AND Titulo='" + objPublicacion.Title + "' AND Subtitle='" + objPublicacion.Subtitle + "' AND Quantity=" + objPublicacion.Quantity + " AND Currency='" + objPublicacion.getCurrency() + "' AND Categoria='" + objPublicacion.Categoria + "' AND DescripcionTitle='Descripcion' AND CaracteristicasTitle='Especificaciones' AND FeatureTitle='Caracteristicas'   ORDER BY 1 DESC";

                strQuery = sComm.CommandText;
                //ControlLog.writeLog("[obtenerIdPublicacionDePublicacion] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.Read())
                {
                    objPublicacion.intIdPublicacion = Convert.ToInt32(sReader[0].ToString());
                }


                sReader.Close();
                sConn.Close();

                return objPublicacion.intIdPublicacion;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[obtenerIdPublicacionDePublicacion] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }



        #endregion



        #region Estados Tareas
        public void crearNuevaTarea(TareaPendiente objTarea)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO TareasPendientes (keyTarea,estadoTarea,descripcionTarea,ultimaActualizacionTarea,tareaTerminada,idUsuario,moduloTarea) VALUES ('" + objTarea.getKey() + "','En curso','" + objTarea.getDescripcion() + "',GETDATE(),0," + objTarea.getIdUsuario() + ",'" + objTarea.getModulo() + "')";


                ControlLog.writeLog("[crearNuevaTarea] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[crearNuevaTarea] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        public void finalizarTarea(string strKey)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "UPDATE TareasPendientes SET ultimaActualizacionTarea=GETDATE(),tareaTerminada=1,estadoTarea='Finalizada' WHERE keyTarea='" + strKey + "'";


                ControlLog.writeLog("[finalizarTarea] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[finalizarTarea] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        public void actualizarEstadoTarea(string strKey, string strDescripcion, string strEstado)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "UPDATE TareasPendientes SET estadoTarea='" + strEstado + "',descripcionTarea='" + strDescripcion + "',ultimaActualizacionTarea=GETDATE() WHERE keyTarea='" + strKey + "'";


                ControlLog.writeLog("[actualizarEstadoTarea] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[actualizarEstadoTarea] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        public List<TareaPendiente> verTareasPendientes(string strIdUsuario)
        {
            List<TareaPendiente> lstTareasPendientes = new List<TareaPendiente>();
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT descripcionTarea,estadoTarea,ultimaActualizacionTarea,moduloTarea,keyTarea FROM TareasPendientes WHERE idUsuario=" + strIdUsuario + " AND tareaTerminada=0";


                //        ControlLog.writeLog("[verTareasPendientes] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    TareaPendiente objTarea = new TareaPendiente(sReader[0].ToString(), sReader[1].ToString(), sReader[2].ToString(), sReader[3].ToString());
                    objTarea.setKey(sReader[4].ToString());
                    lstTareasPendientes.Add(objTarea);
                }

                //       ControlLog.writeLog("[verTareasPendientes] Tareas pendientes encontradas = " + lstTareasPendientes.Count.ToString());

                sReader.Close();
                sConn.Close();

                return lstTareasPendientes;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[verTareasPendientes] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        #endregion



        #region Sesion
        public void agregarValorSesion(string strKey, string strValue)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO ClavesSesion (keySesion,valorSesion) VALUES ('" + strKey + "','" + strValue + "')";


                //     ControlLog.writeLog("[agregarValorSesion] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[agregarValorSesion] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }
        public void actualizarValorSesion(string strKey, string strValue)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "UPDATE ClavesSesion SET valorSesion='" + strValue + "' WHERE keySesion='" + strKey + "' ";


                //     ControlLog.writeLog("[actualizarValorSesion] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[actualizarValorSesion] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }
        public string obtenerValorSesion(string strKey)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strValue = "";

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT valorSesion FROM ClavesSesion with(nolock) WHERE keySesion='" + strKey + "' ";


                //     ControlLog.writeLog("[obtenerValorSesion] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.Read())
                {
                    strValue = sReader[0].ToString();
                }

                sReader.Close();
                sConn.Close();

                return strValue;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[obtenerValorSesion] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }
        public bool existeValorSesion(string strKey)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            bool boolReturn = false;

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT valorSesion FROM ClavesSesion with(nolock) WHERE keySesion='" + strKey + "' ";


                //      ControlLog.writeLog("[existeValorSesion] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                if (sReader.HasRows)
                {
                    boolReturn = true;
                }
                else
                {
                    boolReturn = false;
                }



                sReader.Close();
                sConn.Close();

                return boolReturn;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[existeValorSesion] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }
        public void borrarValorSesion(string strKey)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;


            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM ClavesSesion  WHERE keySesion='" + strKey + "' ";


                //      ControlLog.writeLog("[borrarValorSesion] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();





                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[borrarValorSesion] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }
        #endregion





        public void borrarPublicacionPendiente(string intIdPublicacionParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM PUBLICACION  WHERE idPublicacion=" + intIdPublicacionParam.ToString();

                strQuery = sComm.CommandText;
                ControlLog.writeLog("[borrarPublicacionPendiente] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();




                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[borrarPublicacionPendiente] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        public void borrarPublicacionPendienteEnElAdministrador(string intIdPublicacionParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM PUBLICACIONMANAGER  WHERE idPublicacion=" + intIdPublicacionParam.ToString();

                strQuery = sComm.CommandText;
                ControlLog.writeLog("[borrarPublicacionPendienteEnElAdministrador] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();




                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[borrarPublicacionPendienteEnElAdministrador] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        public void borrarImagenesDePublicacionPendiente(string intIdPublicacionParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM PUBLICACIONPublicacionesImagenes  WHERE idPublicacion=" + intIdPublicacionParam.ToString();

                strQuery = sComm.CommandText;
                //ControlLog.writeLog("[borrarImagenesDePublicacionPendiente] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();




                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[borrarImagenesDePublicacionPendiente] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        public void borrarImagenesHuerfanas()
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM PUBLICACIONImagenes  WHERE idPublicacionImagenes NOT IN (SELECT idPublicacionImagen FROM PUBLICACIONpublicacionesIMAGENES)";

                strQuery = sComm.CommandText;
                ControlLog.writeLog("[borrarImagenesHuerfanas] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();




                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[borrarImagenesHuerfanas] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        public void GuardarPublicacionKo(ControlPublicacionProductoML objProducto)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO PUBLICACIONERRONEA  (idPublicacion,fechaDeError,mensajeDeError) VALUES (" + objProducto.GetIdDbPublicacion() + ",GETDATE(),'" + objProducto.GetErrores() + "')";


                ControlLog.writeLog("[guardarPublicacionConError] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[guardarPublicacionConError] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        public void guardarPublicacionOk(ControlPublicacionProductoML objProducto)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;

            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO PUBLICACIONOK  (idPublicacion,fechaPublicacion,idML,linkML) VALUES (" + objProducto.GetIdDbPublicacion() + ",GETDATE(),'" + objProducto.getIdMl() + "','" + objProducto.getLinkDePublicacion() + "')";


                ControlLog.writeLog("[guardarPublicacionOk] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[guardarPublicacionOk] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        public List<ControlPublicacionProductoML> obtenerPublicacionesOk(string strUsuarioParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            List<ControlPublicacionProductoML> lstProductosPublicadosOk = new List<ControlPublicacionProductoML>();
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT * FROM PublicacionOk with(nolock) WHERE idPublicacion in (SELECT idPublicacion FROM PublicacionManager with(nolock) WHERE idUsuario = " + this.obtenerIdUsuarioDeNickName(strUsuarioParam) + ")";
                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {

                    //  ControlLog.writeLog("[obtenerPublicacionesOk] Par 1 =" + sReader[1].ToString());
                    ControlPublicacionProductoML objProducto = new ControlPublicacionProductoML(this.obtenerPublicacionDeIdDePublicacion(sReader[1].ToString()));
                    //   ControlLog.writeLog("[obtenerPublicacionesOk] Par 2 =" + sReader[2].ToString());
                    objProducto.SetFechaDePublicacion(sReader[2].ToString());
                    //    ControlLog.writeLog("[obtenerPublicacionesOk] Par 3 =" + sReader[3].ToString());
                    objProducto.setIdMlDirecto(sReader[3].ToString());
                    //  ControlLog.writeLog("[obtenerPublicacionesOk] Par 4 =" + sReader[4].ToString());
                    objProducto.setLinkDePublicacionDirecto(sReader[4].ToString());
                    //  ControlLog.writeLog("[obtenerPublicacionesOk] Agregando a la lista");
                    lstProductosPublicadosOk.Add(objProducto);

                }


                //ControlLog.writeLog("[obtenerPublicacionesOk] Retornando OK...");

                sReader.Close();
                sConn.Close();
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[obtenerPublicacionesOk] Excepcion DB: " + ex.Message + " SQL QUERY =" + strQuery);
                throw ex;
            }

            return lstProductosPublicadosOk;
        }

        public List<ControlPublicacionProductoML> obtenerPublicacionesKo(string strUsuarioParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            List<ControlPublicacionProductoML> lstProductosPublicadosKo = new List<ControlPublicacionProductoML>();
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT * FROM PublicacionErronea with(nolock) WHERE idPublicacion in (SELECT idPublicacion FROM PublicacionManager with(nolock) WHERE idUsuario = " + this.obtenerIdUsuarioDeNickName(strUsuarioParam) + ")";
                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    ControlPublicacionProductoML objProducto = new ControlPublicacionProductoML(this.obtenerPublicacionDeIdDePublicacion(sReader[1].ToString()));
                    objProducto.SetFechaDePublicacion(sReader[2].ToString());
                    objProducto.setErrores(sReader[3].ToString());

                    lstProductosPublicadosKo.Add(objProducto);
                }


                sReader.Close();
                sConn.Close();
            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[obtenerPublicacionesKo] Excepcion DB: " + ex.Message + " SQL QUERY =" + strQuery);
                throw ex;
            }

            return lstProductosPublicadosKo;
        }

        public void eliminarProductosOkDeUsuario(string strUsuarioParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM PublicacionOk  WHERE idPublicacion IN (SELECT idPublicacion FROM PUBLICACIONManager WHERE idUsuario=" + this.obtenerIdUsuarioDeNickName(strUsuarioParam) + ")";

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();




                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[eliminarProductosOkDeUsuario] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        public void eliminarProductosKoDeUsuario(string strUsuarioParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM PublicacionErronea  WHERE idPublicacion IN (SELECT idPublicacion FROM PUBLICACIONManager WHERE idUsuario=" + this.obtenerIdUsuarioDeNickName(strUsuarioParam) + ")";

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();




                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[eliminarProductosKoDeUsuario] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        public List<TareaPendiente> verTareasPendientes(string strIdUsuario, string strModuloParam)
        {
            List<TareaPendiente> lstTareasPendientes = new List<TareaPendiente>();
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT descripcionTarea,estadoTarea,ultimaActualizacionTarea,moduloTarea,keyTarea FROM TareasPendientes WHERE idUsuario=" + strIdUsuario + " AND tareaTerminada=0 AND moduloTarea='" + strModuloParam + "'";


                //        ControlLog.writeLog("[verTareasPendientes] " + sComm.CommandText);

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    TareaPendiente objTarea = new TareaPendiente(sReader[0].ToString(), sReader[1].ToString(), sReader[2].ToString(), sReader[3].ToString());
                    objTarea.setKey(sReader[4].ToString());
                    lstTareasPendientes.Add(objTarea);
                }

                //       ControlLog.writeLog("[verTareasPendientes] Tareas pendientes encontradas = " + lstTareasPendientes.Count.ToString());

                sReader.Close();
                sConn.Close();

                return lstTareasPendientes;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[verTareasPendientes] Excepcion DB: " + ex.Message);
                throw ex;
            }
        }

        public void borrarTodasLasTareas()
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM TareasPendientes";

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[borrarTodasLasTareas] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        #region Modificacion de Precios
        public IEnumerable<ReglasExclusion> ObtenerReglasDeExclusion(string user)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            List<ReglasExclusion> Reglas = new List<ReglasExclusion>();

            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT reg_id,reg_tipo,reg_criterio,reg_conector FROM ReglasDeExclusion WHERE idUsuario=" + this.obtenerIdUsuarioDeNickName(user);

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    ReglasExclusion newRule = new ReglasExclusion();
                    newRule.IdRegla = sReader[0].ToString();
                    newRule.Tipo = sReader[1].ToString();
                    newRule.Criterio = sReader[2].ToString();
                    newRule.Conector = sReader[3].ToString();
                    Reglas.Add(newRule);
                }


                sReader.Close();
                sConn.Close();

                return Reglas;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[ObtenerReglasDeExclusion] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }
        public void ModificarReglaDeExclusion(ReglasExclusion regla)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "UPDATE ReglasDeExclusion SET reg_tipo='" + regla.Tipo + "', reg_criterio='" + regla.Criterio + "', reg_conector='" + regla.Conector + "' WHERE reg_id=" + regla.IdRegla;

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[ModificarReglaDeExclusion] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }
        public void BorrarReglaDeExclusion(ReglasExclusion regla)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM ReglasDeExclusion WHERE reg_id=" + regla.IdRegla;

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[BorrarReglaDeExclusion] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }
        public void AgregarReglaDeExclusion(string userParam, ReglasExclusion newRuleParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO ReglasDeExclusion (reg_tipo,reg_criterio,reg_conector,idUsuario) SELECT '"+newRuleParam.Tipo+"','"+newRuleParam.Criterio+"','"+newRuleParam.Conector+"',"+this.obtenerIdUsuarioDeNickName(userParam);

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[BorrarReglaDeExclusion] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        public void LimpiarItemsModificacionesDePreciosPendientes(string userParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM ModificacionPrecioProductos WHERE idUsuario = "+this.obtenerIdUsuarioDeNickName(userParam);

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[LimpiarItemsModificacionesDePreciosPendientes] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }
        public List<ItemParaActualizar> ObtenerItemsPendientesDeModificacion(string userParam)
        {
            List<ItemParaActualizar> items = new List<ItemParaActualizar>();
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT idML,PrecioOriginal,Moneda,PrecioModificado,Titulo,link FROM ModificacionPrecioProductos WHERE idUsuario = " + this.obtenerIdUsuarioDeNickName(userParam);

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    ControlModificacionDePrecios.Item item = new ControlModificacionDePrecios.Item();
                    item.id = sReader[0].ToString();
                    item.price = sReader[1].ToString();
                    item.currency_id = sReader[2].ToString();
                    item.title = sReader[4].ToString();
                    item.permalink = sReader[5].ToString();
                    ItemParaActualizar itemPendiente = new ItemParaActualizar(item);
                    itemPendiente.Monto = Convert.ToDouble(sReader[3].ToString());

                    items.Add(itemPendiente);

                }

                sReader.Close();
                sConn.Close();

                return items;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[ObtenerItemsPendientesDeModificacion] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }
        public List<ItemParaActualizar> ObtenerItemsPendientesDeModificacionKo(string userParam)
        {
            List<ItemParaActualizar> items = new List<ItemParaActualizar>();
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT idML,PrecioOriginal,Moneda,PrecioModificado,Titulo,link,fechaModificacion,error FROM ModificacionPrecioProductosKo WHERE idUsuario = " + this.obtenerIdUsuarioDeNickName(userParam);

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    ControlModificacionDePrecios.Item item = new ControlModificacionDePrecios.Item();
                    item.id = sReader[0].ToString();
                    item.price = sReader[1].ToString();
                    item.currency_id = sReader[2].ToString();
                    item.title = sReader[4].ToString();
                    item.permalink = sReader[5].ToString();
                    ItemParaActualizar itemPendiente = new ItemParaActualizar(item);
                    itemPendiente.Monto = Convert.ToDouble(sReader[3].ToString());
                    itemPendiente.FechaModificacion = sReader[6].ToString();
                    itemPendiente.Error = sReader[7].ToString();

                    items.Add(itemPendiente);

                }

                sReader.Close();
                sConn.Close();

                return items;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[ObtenerItemsPendientesDeModificacionKo] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }

        public List<ItemParaActualizar> ObtenerItemsPendientesDeModificacionOk(string userParam)
        {
            List<ItemParaActualizar> items = new List<ItemParaActualizar>();
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "SELECT idML,PrecioOriginal,Moneda,PrecioModificado,Titulo,link,fechaModificacion FROM ModificacionPrecioProductosOk WHERE idUsuario = " + this.obtenerIdUsuarioDeNickName(userParam);

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();

                while (sReader.Read())
                {
                    ControlModificacionDePrecios.Item item = new ControlModificacionDePrecios.Item();
                    item.id = sReader[0].ToString();
                    item.price = sReader[1].ToString();
                    item.currency_id = sReader[2].ToString();
                    item.title = sReader[4].ToString();
                    item.permalink = sReader[5].ToString();
                    ItemParaActualizar itemPendiente = new ItemParaActualizar(item);
                    itemPendiente.Monto = Convert.ToDouble(sReader[3].ToString());
                    itemPendiente.FechaModificacion = sReader[6].ToString();
                    
                    items.Add(itemPendiente);

                }

                sReader.Close();
                sConn.Close();

                return items;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[ObtenerItemsPendientesDeModificacionOk] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }
        public void QuitarItemPendienteDeModificacionDePrecios(ItemParaActualizar item, string userParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM ModificacionPrecioProductos WHERE idMl = '" + item.ItemOriginal.id + "' AND idUsuario = "+this.obtenerIdUsuarioDeNickName(userParam);

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[QuitarItemPendienteDeModificacionDePrecios] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }
        public void AgregarItemModificacionesDePreciosPendiente(ItemParaActualizar newItem, string userParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO ModificacionPrecioProductos (idML,PrecioOriginal,Moneda,PrecioModificado,Titulo,Link,idUsuario) " + 
                                    " SELECT '"+newItem.ItemOriginal.id+"','"+newItem.ItemOriginal.price+"','"+newItem.ItemOriginal.currency_id+"',"+
                                    "'"+newItem.Monto.ToString()+"','"+newItem.ItemOriginal.title+"','"+newItem.ItemOriginal.permalink+"',"+this.obtenerIdUsuarioDeNickName(userParam);

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[AgregarItemModificacionesDePreciosPendiente] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }
        public void AgregarItemModificacionesDePreciosFinalizadoOk(ItemParaActualizar newItem, string userParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO ModificacionPrecioProductosOk (idML,PrecioOriginal,Moneda,PrecioModificado,Titulo,Link,idUsuario,fechaModificacion) " +
                                    " SELECT '" + newItem.ItemOriginal.id + "','" + newItem.ItemOriginal.price + "','" + newItem.ItemOriginal.currency_id + "'," +
                                    "'" + newItem.Monto.ToString() + "','" + newItem.ItemOriginal.title + "','" + newItem.ItemOriginal.permalink + "'," + this.obtenerIdUsuarioDeNickName(userParam) +", GETDATE()";

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[AgregarItemModificacionesDePreciosFinalizadoOk] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }
        public void AgregarItemModificacionesDePreciosFinalizadoKo(ItemParaActualizar newItem, string userParam, string error)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "INSERT INTO ModificacionPrecioProductosKo (idML,PrecioOriginal,Moneda,PrecioModificado,Titulo,Link,idUsuario,fechaModificacion,error) " +
                                    " SELECT '" + newItem.ItemOriginal.id + "','" + newItem.ItemOriginal.price + "','" + newItem.ItemOriginal.currency_id + "'," +
                                    "'" + newItem.Monto.ToString() + "','" + newItem.ItemOriginal.title + "','" + newItem.ItemOriginal.permalink + "'," + this.obtenerIdUsuarioDeNickName(userParam) + ", GETDATE(), '"+error+"'";

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[AgregarItemModificacionesDePreciosFinalizadoKo] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }
        public void LimpiarItemsModificacionesDePreciosPendientesOk(string userParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM ModificacionPrecioProductosOk WHERE idUsuario = " + this.obtenerIdUsuarioDeNickName(userParam);

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[LimpiarItemsModificacionesDePreciosPendientesOk] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }
        public void LimpiarItemsModificacionesDePreciosPendientesKo(string userParam)
        {
            SqlConnection sConn = new SqlConnection();
            SqlCommand sComm = new SqlCommand();
            SqlDataReader sReader;
            string strQuery = "";
            try
            {
                sConn.ConnectionString = _strConnectionString;

                sComm.CommandType = CommandType.Text;

                sComm.CommandText = "DELETE FROM ModificacionPrecioProductosKo WHERE idUsuario = " + this.obtenerIdUsuarioDeNickName(userParam);

                strQuery = sComm.CommandText;

                sConn.Open();

                sComm.Connection = sConn;

                sReader = sComm.ExecuteReader();


                sReader.Close();
                sConn.Close();

                return;

            }
            catch (Exception ex)
            {
                ControlLog.writeLog("[LimpiarItemsModificacionesDePreciosPendientesKo] Excepcion DB: " + ex.Message + "SQL QUERY=" + strQuery);
                throw ex;
            }
        }
        #endregion













       
    }

}